「はじめてのCloudFormation」というテーマのビデオセッションでお話しました #devio2020
はじめに
こんにちは。大阪オフィスの林です。
本日2020年6月16日(火)より、弊社主催のオンラインイベントDevelopers.IO 2020 CONNECTが始まりました!合計7日間(6/16~7/7までの火曜日と金曜日)で約100本のセッションをお届する予定ですので、ぜひ様々なセッションをご視聴頂けますと幸いです!
本記事では私のビデオセッションをご紹介させて頂きます。
セッション動画
セッション動画の目次
下記のような流れでお話しさせて頂きました。
動画では「Infrastructure as a Code」という文言・名称で説明を進めてしまっていましたが、一般的には「Infrastructure as Code (Codeの前の「a」はなし)」と言ったり書いたりするようでした。動画の修正は追いついていないのでひとまずご了承頂ければと思います。
セッション動画のコンセプト
本セッション動画では、あまりテクニカルな内容になり過ぎず、どちらかというと初心者の方であったり、これからCloudFormationをお使いになる方に向けてお話をさせて頂きました。
セッション動画のサマリ
冒頭はCloudFormationをすごく簡単におさらいさせて頂きました。
続いて、CloudFormationをお使いになる前に少し立ち止まって考えて頂きたいことなんかをお話させて頂きました。
後半は、実際にコードの解説をしながら、AWSマネージメントコンソールとセットで「6つ」のデモを行わせて頂きました。
デモの後半は、私自身が過去経験した、初心者の方が遭遇しやすいエラーを「4個」お伝えさせて頂きました。
最後に、Infrastructure as Codeに対して私自身が考えていることをサクッとお伝えさせて頂きました。
まとめ
CloudFormationやInfrastructure as Codeに対して、改めて向き合う機会になって自分自身大変勉強になったというのが、今の実感です。
本セッションの動画がこれからCloudFormationをお使いになる方の参考になったり、既にお使いの方にも参考になって頂けると幸いです。
以上、大阪オフィスの林がお送りしました!
参考
デモの中で使用したコードです。
VPCとサブネットを作成したコード
AWSTemplateFormatVersion: '2010-09-09' Description: "Create BaseNetwork" Resources: # ------------------------------------------------------------# # VPC # ------------------------------------------------------------# MyVPC: Type: "AWS::EC2::VPC" Properties: CidrBlock: 10.0.0.0/16 Tags: - Key: Name Value: Sample-prd-vpc # ------------------------------------------------------------# # Subnet # ------------------------------------------------------------# MySubnet01: Type: "AWS::EC2::Subnet" Properties: VpcId: !Ref MyVPC AvailabilityZone: ap-northeast-1a CidrBlock: 10.0.0.0/24 Tags: - Key: Name Value: Sample-prd-subnet01 MySubnet02: Type: "AWS::EC2::Subnet" Properties: VpcId: !Ref MyVPC AvailabilityZone: ap-northeast-1c CidrBlock: 10.0.1.0/24 Tags: - Key: Name Value: Sample-prd-subnet02 # ------------------------------------------------------------# # Output # ------------------------------------------------------------# Outputs: MyVPC: Value: !Ref MyVPC Export: Name: !Sub "${AWS::StackName}-MyVPC" MySubnet01: Value: !Ref MySubnet01 Export: Name: !Sub "${AWS::StackName}-MySubnet01" MySubnet02: Value: !Ref MySubnet02 Export: Name: !Sub "${AWS::StackName}-MySubnet02"
インプットパラメータを使ったコード
AWSTemplateFormatVersion: '2010-09-09' Description: "Create BaseNetwork" # ------------------------------------------------------------# # Input Parameters # ------------------------------------------------------------# Metadata: AWS::CloudFormation::Interface: ParameterGroups: - Parameters: - SystemName - EnvType Parameters: SystemName: Description: Please type the SystemName. Type: String Default: Sample EnvType: Description: Select Environment Type. Type: String Default: prd AllowedValues: - stg - prd CidrBlock: Description: Please type the CidrBlock. Type: String Default: 10.0.0.0/16 Resources: # ------------------------------------------------------------# # VPC # ------------------------------------------------------------# MyVPC: Type: "AWS::EC2::VPC" Properties: CidrBlock: !Sub ${CidrBlock} Tags: - Key: Name Value: !Sub ${SystemName}-${EnvType}-vpc # ------------------------------------------------------------# # Subnet # ------------------------------------------------------------# MySubnet01: Type: "AWS::EC2::Subnet" Properties: VpcId: !Ref MyVPC AvailabilityZone: ap-northeast-1a CidrBlock: !Select [ 0, !Cidr [ !GetAtt MyVPC.CidrBlock, 1, 8 ]] Tags: - Key: Name Value: !Sub ${SystemName}-${EnvType}-subnet01 MySubnet02: Type: "AWS::EC2::Subnet" Properties: VpcId: !Ref MyVPC AvailabilityZone: ap-northeast-1c CidrBlock: !Select [ 1, !Cidr [ !GetAtt MyVPC.CidrBlock, 2, 8 ]] Tags: - Key: Name Value: !Sub ${SystemName}-${EnvType}-subnet02 # ------------------------------------------------------------# # Output # ------------------------------------------------------------# Outputs: MyVPC: Value: !Ref MyVPC Export: Name: !Sub "${AWS::StackName}-MyVPC" MySubnet01: Value: !Ref MySubnet01 Export: Name: !Sub "${AWS::StackName}-MySubnet01" MySubnet02: Value: !Ref MySubnet02 Export: Name: !Sub "${AWS::StackName}-MySubnet02"
EC2を作ったコード
AWSTemplateFormatVersion: '2010-09-09' Description: "Create EC2" # ------------------------------------------------------------# # Input Parameters # ------------------------------------------------------------# Metadata: AWS::CloudFormation::Interface: ParameterGroups: - Parameters: - SystemName - EnvType - ImageID - EC2KeyPair - BaseNetworkStackName Parameters: SystemName: Description: Please type the SystemName. Type: String Default: Sample EnvType: Description: Please Select Environment Type. Type: String Default: prd AllowedValues: - stg - prd ImageID: Description: Please type the EC2 image ID. Type: String Default: ami-0a1c2ec61571737db # Amazon Linux 2 AMI EC2KeyPair: Description: Please Select EC2 key name. Type: AWS::EC2::KeyPair::KeyName BaseNetworkStackName: Description: Please type the BaseNetwork stack name. Type: String Default: Mynetwork1 Resources: # ------------------------------------------------------------# # EC2 # ------------------------------------------------------------# MyEC2: Type: "AWS::EC2::Instance" Properties: AvailabilityZone: ap-northeast-1a ImageId: !Sub ${ImageID} InstanceType: m4.large KeyName: !Sub ${EC2KeyPair} BlockDeviceMappings: - DeviceName: /dev/xvda Ebs: VolumeType: gp2 VolumeSize: 20 SubnetId: { "Fn::ImportValue": !Join [ "-", [ "Ref":"BaseNetworkStackName","MySubnet01"]] } Tags: - Key: Name Value: !Sub ${SystemName}-${EnvType}-ec2
作ったEC2を更新したコード
AWSTemplateFormatVersion: '2010-09-09' Description: "Create EC2" # ------------------------------------------------------------# # Input Parameters # ------------------------------------------------------------# Metadata: AWS::CloudFormation::Interface: ParameterGroups: - Parameters: - SystemName - EnvType - ImageID - EC2KeyPair - BaseNetworkStackName Parameters: SystemName: Description: Please type the SystemName. Type: String Default: Sample EnvType: Description: Please Select Environment Type. Type: String Default: prd AllowedValues: - stg - prd ImageID: Description: Please type the EC2 image ID. Type: String Default: ami-0a1c2ec61571737db # Amazon Linux 2 AMI EC2KeyPair: Description: Please Select EC2 key name. Type: AWS::EC2::KeyPair::KeyName BaseNetworkStackName: Description: Please type the BaseNetwork stack name. Type: String Default: Mynetwork Resources: # ------------------------------------------------------------# # EC2 # ------------------------------------------------------------# MyEC2: Type: "AWS::EC2::Instance" Properties: AvailabilityZone: ap-northeast-1a ImageId: !Sub ${ImageID} InstanceType: m4.large KeyName: !Sub ${EC2KeyPair} DisableApiTermination: true BlockDeviceMappings: - DeviceName: /dev/xvda Ebs: VolumeType: gp2 VolumeSize: 20 SubnetId: { "Fn::ImportValue": !Join [ "-", [ "Ref":"BaseNetworkStackName","MySubnet01"]] } Tags: - Key: Name Value: !Sub ${SystemName}-${EnvType}-ec2